import { useUser } from './../stores/userStore';
import { route } from 'quasar/wrappers';

import {
  createMemoryHistory,
  createRouter,
  createWebHashHistory,
  createWebHistory,
} from 'vue-router';

import routes from './routes';
import { Dialog } from 'quasar';
import { useRouter } from 'vue-router';

const router = useRouter()
/*
 * If not building with SSR mode, you can
 * directly export the Router instantiation;
 *
 * The function below can be async too; either use
 * async/await or return a Promise which resolves
 * with the Router instance.
 */

export default route(function (/* { store, ssrContext } */) {
  const createHistory = process.env.SERVER
    ? createMemoryHistory
    : process.env.VUE_ROUTER_MODE === 'history'
    ? createWebHistory
    : createWebHashHistory;

  const Router = createRouter({
    scrollBehavior: () => ({ left: 0, top: 0 }),
    routes,

    // Leave this as is and make changes in quasar.conf.js instead!
    // quasar.conf.js -> build -> vueRouterMode
    // quasar.conf.js -> build -> publicPath
    history: createHistory(process.env.VUE_ROUTER_BASE),
  });

  Router.onError((error, to) => {
    if (
      error.message.includes('Failed to fetch dynamically imported module') ||
      error.message.includes('Importing a module script failed')
    ) {
      if (!to?.fullPath) {
        window.location.reload();
      } else {
        window.location.href = to.fullPath;
      }
    }
  })

  const user = useUser();

  Router.beforeEach((to, from, next) => {
    // to and from are both route objects. must call `next`.
    user.load();
    
    // already login
    if (user.isLogin && to.name == 'login') {
      next({ name: 'home' });
    } else if (!user.isLogin && to.name !== 'login') {
      // redirect the user to the login page
      Dialog.create({
        title: 'Access Deined',
        message: 'Please Login First',
        persistent: true,
      });
      next({ name: 'login' });
      router.replace('/login')

    } else {
      next();
    }
  });

  return Router;
});
